perm filename PAGE.F4[PAG,LCS]13 blob sn#517372 filedate 1980-06-14 generic text, type T, neo UTF8
00100	C***** AIDS IN EXTRACTING PARTS FROM SCORES AND DOES AUTOMATIC PAGE LAYOUT. 
00200	C***************************** THERE ARE STILL SEVERAL BUGS IN THIS PROG.
00300	C***************************** TRANSPOSE-ONLY IS NOT FULLY TESTED.
00400	C*********** TRANSPOSITION OF 'F' PARTS IN BASS CLEF HAS SOME PROBLEMS.
00500	C***************************** ETC., ETC.    8/78
00600	
00700	C SEE PAGE.CMD FOR LOADING INSTRUCTIONS
00800	C **** SUBROUTINE LIST *****
00900	C PAGE:  READX
01000	C RESPC:
01100	C RESTP:
01200	C WRTPAG: 
01300	C PGSUB: FILOUT(NAMQ,NPG), FILEIN, STAVES
01400	C TRONLY: 
01500	C TRNSP: TRNSP, RVRS
01600	C PTMOVX: PTMOVE, TURN
01700	C FNDTRN: MNMX, FNDTRN, BRJUGL, GET
01800	C PFAIL: LOOKF,LOOKX,LOOK,SHFTQ,SORT2,NORH,FNDEND,MINMAX,RLOOP,BLTEM,IFIX,FLOAT
01900	C	 GETPTS,MOVIT,EXTEN,DBAR,QRN,SORT,SHIFT,SHFT1,SHFT0,PSHFT,ADRST,STAFF
02000	C        RIGHT,RESTS,EXCHG,EXCH,SHRNK,EXPND,CLFNUM,SLRV,CLEFN,MMNN,CODEN,ZERO 
02100	C EXT:   PUTEXT,EXTOUT,GETEXT,EXTIN,FINEXT
02200	
02300		COMMON/STF/RSTFAC(0/7),RSTJ2 /POSI/STFF(0/7),JJ2,JPQ
02400		1 /IPG/IPG,JPG,BRACK(0/7),RSTNUM(8),RPSZ(8),RHGT(8),
02500		1 RCLEF(0/7) /RSIG/RSIG(0/7) /IVV/NRD(200)
02600		COMMON RS,JA,REST,J2,RQ(18),JX,PR,LX,RDIS
02700	C  ORDER OF COMMON BLOCKS **MUST** STAY AS IS!
02800		COMMON/XRN/RN(3500) /SF/KL,RT,KP,STFSZ,NAMX,EXT
02900		1 /PTR/KWDS(350)/LLL/LLL,LL,I,IX,XSIG/XXX/LK,LP,JY /JN/J,N
03000	C  INCREASE DIMENSION OF KWDS (KPN & Q) FOR VERY FULL PAGES.
03100	      DIMENSION MM(1500),NN(1500),BARS(509),STFNM(0/7),KSAVE(30),
03200		1 RMETER(0/7),RCL(0/7),NUMS(30),PGTRN(500),SAVES(470),U(1)
03300	C KSAVE AND SAVES ARE TO SAVE REHEARSAL NUMS, ETC. -- LIMIT=30
03400		COMMON /PX/KPN(450) /Q/Q(4000) /KBAR/KBAR(1027) /IRST/IRST
03500	 	1 /RCLF/KK,CLEF,KW,ITEM,RSTAFF,SN,YN,RNAM,RNAM2,RNAM3
03600		1 /RSP/KNM(100) /ENDL/ENDLN,KQ,NAME,NMPG,SPCNT,LASTNM
03700		1 /JWDS/JWDS(300),RRN(3000)
03800	C  JWDS IS EQUIVALENCED IN PTMOVX.F4 AND RESTP.F4
03900		DATA FIB/.7/,RSPC/25./,PGNUM/1.6/,RNMHT/16.0/,RNMSZ/1.0/
04000		1 ,RLTRSZ/1.0/,SPCPG/2.7/
04100		EQUIVALENCE (RQ(2),R4),(R5,RQ(3)),(R6,RQ(4)),(R7,RQ(5))
04200		1,(MM,RN),(NN,RN(1501)),(KS,RS),(BARS,KBAR(4)),(JRSTF,RSTJ2)
04300		1,(R8,RQ(6)),(R9,RQ(7)),(RQ(10),XLFT),(KBR,KBAR),(T,KBAR(2))
04400		1,(STFNM,KBAR(508)),(NUM1,NUMS,KPN),(PGTRN(1),KBAR(5 16))
04500		1,(SAVES,Q(3001)),(KSAVE,Q(3475)),(U,KBAR(1026))
04600	C  HANDLES 503 PAGES AND PAGE-TURN INFO. IN KBAR AND PGTRN
04700	C  RQ(2) IS R4, RQ(3) IS R5 ETC.  STAFF NAMES START AT KBAR(508)=STF(0)
04800	
04900		RN(2)=0
05000		EXT='MS'
05100		IRST=0
05200	C IRST IS USED IN SUBROUTINE RESTP
05300		IPG=0
05400		KBR=0
05500		NMPG='PAGEA'
05600		JPG=0
05700		JRD=1
05800		ENDLN=0
05900		SAVSIZ=0
06000		ISN=0
06100		NCNT=10000
06200		IFOUND=0
06300	
06400		TYPE 1000   
06500		ACCEPT 2000,NAMX
06600		IF(NAMX.EQ.0)CALL PT2
06700		IF(NAMX.EQ.3)CALL TRONLY
06800		NPG=NAMX-2
06900		TYPE 3300
07000		IF(NPG.GE.0)GO TO 3000
07100	CC	IF(NPG.GE.0)TYPE 3
07200		ACCEPT 2,KS,NTYPE
07300	C  TYPE -1 AFTER NAME(I.E.5 SPACES) TO PRINT INST. NAMES AS READ.
07400	CC	NAMZ=KS
07500		JNM=1
07600	
07700		CALL LO2UP(KS)
07800	143	CALL IFILE(1,KS)
07900		READ(1,2)K
08000	CC843	READ(1,2)K
08100		IF(K.NE.'COMME')GO TO 543
08200	743	READ(1,643),K,K,K
08300	C  READ ET DIRECTORY !∃∀ βλπα∀πεβα!ββX!
08400		IF(K.NE.';')GO TO 743
08500		READ(1,2)K
08600		GO TO 843
08700	C  FIRST LINE MUST BE EXTENSION NAME
08800	643	FORMAT(3A1)
08900	2	FORMAT(A5,30I)
09000	CC3	FORMAT(' TYPE FILE NAME.EXT -- '$)
09100	3300	FORMAT(' TYPE FILE NAME -- '$)
09200	1000	FORMAT(' 1=PARTS, 2=PAGE LAYOUT, 3=TRNSP ONLY, <CR>=OLD  '$)
09300	2000	FORMAT(I)
09400	CC543	READ(1,2,END=343),KNM(JNM),(KPN(K),K=1,30)
09500	543	CALL IFILE(1,KS)
09600	843	CALL READX(1,KNM(JNM),EXT,KEND,NUMS)
09700		IF(KEND)GO TO 343
09800		JNM=JNM+1
09900		DO 434 K=1,30
10000		J=KPN(K)
10100		JPG=JPG+1
10200		NRD(JPG)=J
10300	C  BE CAREFUL ABOUT RUNNING OVER NRD ARRAY (100)-- ZEROS ARE INSERTED***********
10400	434	IF(J.EQ.0)GO TO 843
10500		GO TO 843
10600	CC3000	CALL NAMEXT     
10700	3000	CALL READX(5,NAMX,EXT,KEND,NUMS)
10800		KNM(1)=NAMX
10900		GO TO 4000
11000	343	KNM(JNM)=-1
11100		NXX=NRD(1)
11200	C NXX COULD BE EQUIV. TO NRD(1)!!
11300	4000	NAMZ=KNM(1)
11400		IF(NPG.GE.0.AND.NUM1.GT.0)NCNT=NUM1
11500	C TYPE A # AFTER FILE NAME TO SET # OF FILES TO BE READ.
11600		DO 911 K=0,7
11700		RCLEF(K)=99
11800		RCL(K)=99
11900		RMETER(K)=99
12000	C  INITS STUFF FOR PAGE LAYOUT
12100		BRACK(K)=0
12200	911	RSIG(K)=99
12300		
12400	744	XSIG=FIB
12500		QSIG=FIB
12600		CLEF=-1
12700		XMTR=FIB
12800		XLFT=0
12900		JPG=0
13000		YCLEF=2.
13100		YSIG=2.
13200		YMTR=2.
13300		RSTAFF=0
13400		RM=0
13500		JNM=1
13600	CZ1344	JNM=1
13700	
13800	1344	IF(NCNT.EQ.0)GO TO 1212
13900	C NCNT IS INPUT FILE COUNTER.
14000		NCNT=NCNT-1
14100		ZLFT=.5
14200		KQ=0
14300		IF(NPG.EQ.0)JRD=0
14400		LLL=1
14500		LK=1
14600	86	FORMAT(1XA5)
14700	186	FORMAT(1XA5,'.',A3)
14800	
14900	83	NAME=KNM(JNM)
15000	CZ	JNM=JNM+1
15100		IF(NAME.EQ.-1)GO TO 1212
15200	CC	JRD=JRD+1
15300	CXCX	NXX=NRD(JRD+1)
15400	CZ	NXX=NRD(JRD)
15500	C?????????????	IF(KBR.EQ.0)GO TO 284
15600		JZ=-1
15700	10	IF(LOOKX(NAME,EXT))GO TO 284
15800	CZ100	IF(JZ)GO TO 344
15900	C  FOUND NO MORE TO READ
16000	344	NAME=NAMZ+256
16100	C UPDATE 4TH CHAR.  (E.G. AAAAA TO AAABA)
16200		NAMZ=NAME
16300		KNM(JNM)=NAME
16400		IF(LOOKX(NAME,EXT))GO TO 284 
16500	C NOW ALL DONE WITH INPUT, START OUTPUT
16600	1212	CALL PUTEXT('BARS','PAG')
16700		RSTJ2=SAVSIZ
16800		DO 1213 K=0,75
16900	1213	U(K)=RSTFAC(K)
17000	C SAVE VARIOUS THINGS ON END OF KBAR ARRAY FOR USE IN OUTPUT SECTION.
17100		CALL EXTOUT(KBAR,1100)
17200	CC	CALL EXTOUT(RSTFAC,128)
17300		CALL FINEXT
17400	C K (NUM OF BARS - UP TO 511) IS FIRST LOC OF KBAR.
17500		CALL PT2(KPN,Q,KWDS,RN)
17600	
17700	284	JZ=0
17800		SN=0
17900		IF(NPG)SN=200
18000		SNMTR=SN
18100		IF(RM.NE.0)GO TO 277
18200		RM=-1
18300	4	FORMAT(' TYPE INST NAME  '$)
18400		IF(NPG.GE.0)GO TO 277     
18500		TYPE 4
18600		ACCEPT 2,RNAM,K
18700		CALL LO2UP(RNAM)
18800		RNAM2=-1
18900		RNAM3=-1
19000		RNAM4=-1
19100		IF(K.EQ.0)GO TO 277
19200		TYPE 177
19300		ACCEPT 2,RNAM2,K
19400		CALL LO2UP(RNAM2)
19500		IF(K.EQ.0)GO TO 277
19600	C  TYPE NUM AFTER NAME TO ENTER UP TO 4 NAMES.
19700		TYPE 177
19800		ACCEPT 2,RNAM3
19900		CALL LO2UP(RNAM3)
20000		TYPE 177
20100		ACCEPT 2,RNAM4
20200		CALL LO2UP(RNAM4)
20300	177	FORMAT(' OTHER INST NAME   ',$)
20400	
20500	
20600	277	TYPE 186,NAME,EXT
20700	C*** 	CALL GETEXT(NAME,EXT)
20800	C*** C  LP IS START OF RN ARRAY THIS TIME
20900	C*** 	CALL EXTIN(RSTFAC,20)
21000	C*** 	CALL EXTIN(KWDS,JJ2)
21100	C*** 	CALL EXTIN(RN,JPQ)
21200		CALL INMUS(NAME,EXT,RN,KWDS,RSTFAC)
21300	C NEW SAVE FORMAT
21400		IF(JRSTF.LT.10000)RSTJ2=1.0
21500	C X!Z+*↑: WHERE IS THE BUG THAT PUTS AN INTEGER INTO RSTJ2????
21600	CZ	IF(SAVSIZ.EQ.0)SAVSIZ=RSTJ2
21700		IPG=NPG
21800	C  IPG MUST BE RESET EACH TIME BECAUSE READIN WIPES IT OUT.
21900	
22000		CALL RLOOP(Q,RN,JPQ)
22100		ITEM=JJ2-2
22200	
22300	1211	R=RN(KWDS(1)+2)
22400		K=2
22500		LS=1
22600		J=0
22700	C  SORTS NOTES AND RHYTH ONLY
22800	1111	KX=KWDS(K)
22900		RA=RN(KX+2)
23000		IF(RA.GE.R)GO TO 1011
23100		CALL EXCH(KWDS(K),KWDS(LS))
23200		J=-1
23300	1011	R=RA
23400	2611	LS=K
23500		K=K+1
23600		IF(K.LE.ITEM)GO TO 1111
23700		IF(J)GO TO 1211
23800	C NOW ALL SORTED  (BY  STAFF)
23900		J=1
24000		KW=1
24100	
24200		DO 1311 K=1,ITEM
24300		LS=KWDS(K)
24400		IF(RN(LS+1).GT.2)GO TO 2711
24500		RN(LS+3)=RN(LS+3)-.001
24600	C  MOVE ALL NOTES AND RESTS SLIGHTLY TO LEFT. (FOR SORTER)
24700	2711	M=RN(LS)+3
24800		CALL RLOOP(Q(J),RN(LS),M)
24900		J=J+M
25000		KPN(K)=KW
25100	1311	KW=KW+M  
25200	
25300		KPN(ITEM+1)=KW
25400	CC	DO 1511 K=1,ITEM+1
25500	CC1511	KWDS(K)=KPN(K)
25600	CC	DO 1611 K=1,JPQ
25700	CC1611	RN(K)=Q(K)
25800		CALL BLTEM
25900	C  BLTEM BLTS ARRAYS KPN AND Q INTO KWDS AND RN
26000	
26100		DO 18 K=1,JPQ
26200	18	Q(K)=0
26300	C ZERO IT FOR FUTURE SAFETY
26400	
26500		JCUE=0
26600		RLFT=10000
26700	811	DO 577 K=1,ITEM
26800		R=CODEN(KWDS,K,RN,J)
26900		IF(R.GT.2)GO TO 809
27000		IF(RLFT.GT.RN(J+3))RLFT=RN(J+3)
27100	C RLFT IS LEFT-MOST NOTE OR REST.  USED FOR DISCARDING ENTERING SLURS.
27200		GO TO 577
27300	809	IF(R.LT.4)GO TO 577
27400		RWD=RN(J)
27500	C RWD IS WDCNT OF EACH ITEM
27600		JS=RN(J+2)
27700		IF(IPG.LT.0)GO TO 111
27800	C IPG=-1 = EXTRACTING PARTS, =0  = PAGE LAYOUT.
27900		IF(R.NE.8)GO TO 211
28000		STFNM(JS)=0
28100		IF(RWD.GE.7)STFNM(JS)=RN(J+9)
28200	C SAVES STAFF IDENT. NAME
28300	1811	IF(ENDLN.NE.0)GO TO 577
28400		JPG=JPG+1
28500		LS=JS+1
28600		RSTNUM(LS)=JS
28700		RHGT(LS)=0
28800	 	IF(RWD.GE.2)RHGT(LS)=RN(J+4)
28900		RPSZ(LS)=RSTFAC(JS)
29000		IF(SAVSIZ.EQ.0)SAVSIZ=RPSZ(LS)
29100		IF(R5.EQ.0)SPCNT=SPCPG*RPSZ(LS)
29200	211	IF(R.NE.4)GO TO 577
29300		IF(RN(J+3).LT.RLFT)GO TO 311
29400	CC	IF(RN(J+3).LT.ZLFT)GO TO 311
29500	C ASSUMES NOTE OR REST HAS ALREADY BEEN SEEN. (ZLFT=P3+.5)
29600		IF(RN(J+2).NE.0)RN(J+1)=44
29700	CC	IF(RN(J+2).EQ.0)GO TO 577
29800	CC511	RN(J+1)=44
29900	C  BARS NOT ON STAFF ZERO NOW HAVE CODE NUM. 44
30000		GO TO 577
30100	311	IF(IPG.LT.0)GO TO 577
30200		IF(ENDLN.NE.0)GO TO 577
30300		IF(RWD.GE.5)BRACK(JS)=RN(J+7)+RN(J+4)*100.
30400	C  SAVE 'BRACKET' INFO (P7=3,4 OR 5) - CAN FIND WRONG THING!!
30500		GO TO 577
30600	
30700	111	IF(R.NE.8)GO TO 112
30800		IF(RWD.LT.7)GO TO 577
30900	C  NO NAME ON THIS STAFF - SO JUMP
31000		IF(RN(J+7).NE.0)GO TO 577
31100	C  SKIPS INVISIBLE STAVES.
31200		XLFT=RN(J+3) 
31300	C LEFT LIMIT OF STAFF
31400		R9=RN(J+9)
31500		IF(NTYPE.LT.0)TYPE 86,R9
31600		IF(R9.EQ.RNAM)GO TO 977
31700		IF(RNAM2.EQ.R9)GO TO 977
31800		IF(RNAM3.EQ.R9)GO TO 977
31900		IF(RNAM4.NE.R9)GO TO 577
32000	977	TYPE 1577,R9,NAME
32100		IF(SN.NE.200.)PAUSE ' **** SAME NAME FOUND AGAIN ****'
32200		I=JS+RSTAFF
32300		SN=I
32400		SNMTR=SN
32500		IFOUND=-1
32600	C FLAG TO SAVE RN AND KWDS ARRAYS
32700		RPSZ(1)=RSTFAC(JS)
32800		IF(SAVSIZ.EQ.0)SAVSIZ=RPSZ(1)
32900	C  SO IT WON'T LOOK ON MORE STAVES IN OTHER FILES.
33000	CZ	IF(NXX.GT.1)NXX=-NXX
33100	C THIS TAKEN OUT 3/7/80 BECAUSE DIDN'T FIND WORDS IN LOWER FILES.
33200		JCUE=-1
33300	CCC	IF(IPG.LT.0)TYPE 1577,R9,NAME
33400	C WE ONLY GET WHEN EXTRACTING PARTS.
33500		GO TO 577
33600	1577	FORMAT(1XA5,' FOUND IN ',A5)
33700	CXXX	GO TO 477
33800	112	IF(IPG.GE.0)GO TO 577
33900		IF(R.NE.16)GO TO 113
34000		IF(RN(J+5).LT.100)GO TO 577
34100		GO TO 1113
34200	113	IF(R.NE.10)GO TO 577
34300	C  SKIPS PAGE NUMS. (I.E. P7 > 2)
34400		IF(RN(J+6).LT.100)GO TO 577
34500	C SAVE NUMBER IF SIZE FACTOR(R6) IS +100 (JUST LIKE CODE 16)
34600	C????******ALL THIS TO 800-1 CAN NOW BE TAKEN OUT.  USE P6+100 FOR REHRSL. #S.
34700		RN(J+4)=RNMHT
34800		RN(J+6)=RNMSZ
34900	C  THE ABOVE SET HEIGHT AND SIZE OF REHEARSAL NUMS.
35000	1113	RN(J+2)=0
35100	C PARTS ARE ALWAYS ON STAFF 0
35200	CX	JS=J
35300		JJK=RWD+2+LK
35400	CX	DO 1112 JJJ=LK,JJK
35500	CX    	SAVES(JJJ)=RN(JS)
35600	CX1112	JS=JS+1
35700		I=JJK-LK+1
35800		CALL RLOOP(SAVES(LK),RN(J),I)
35900	C PUTS RN INTO SAVES
36000		LK=JJK+1
36100		RN(J+2)=10.
36200		LLL=LLL+1
36300		KSAVE(LLL)=LK
36400	577	CONTINUE
36500	C  DIDN'T FIND USEFUL INFO SO SKIP THIS FILE
36600	CX	IF(JCUE)GO TO 477
36700	CCC	IF(IPG)TYPE 1577,RNAM,NAME
36800	477	I=JPQ-2
36900	C READS AND WRITES 1 EXTRA WORD
37000		IF(IPG.EQ.0)GO TO 13
37100	
37200		IF(IFOUND.GE.0)GO TO 877
37300		IFOUND=-IFOUND
37400		JTEM=ITEM+1
37500		DO 1877 K=1,JTEM
37600	1877	JWDS(K)=KWDS(K)
37700		DO 2877 K=1,KWDS(JTEM)
37800	2877	RRN(K)=RN(K)
37900	C NOW DATA FOR THIS INST. IS SAVED.
38000	
38100	CZ	IF(NXX.GT.0)GO TO 877
38200	C NEXT FOR PARTS ONLY.  TO SKIP A FILE (OR MORE)
38300	CZ	NAME=NAME-2*(NXX+1)
38400	CZ	NXX=1
38500	877	NXX=NXX-1
38600		KNM(JNM)=NAME
38700		NAME=NAME+2
38800		IF(NXX.NE.0)GO TO 277
38900		JRD=JRD+1
39000		NXX=NRD(JRD)
39100		IF(NXX.NE.0)GO TO 44
39200		JNM=JNM+1
39300		NAMZ=KNM(JNM)
39400		KNM(JNM)=NAMZ-2
39500	C KNM GETS BACK +2 AT RETURN FROM RESPC.
39600		JRD=JRD+1
39700		NXX=NRD(JRD)
39800	CZ	NAME=0
39900	CZ	NAMZ=0
40000	44	RSTAFF=0
40100	13	YN=0
40200		IF(SN.NE.200)GO TO 8
40300		YN=-1
40400		IF(YCLEF.GT.1)YCLEF=-1
40500		IF(YSIG.GT.1)YSIG=-1
40600		IF(YMTR.GT.1)YMTR=-1
40700	
40800	8	ZLFT=XLFT+.5
40900		RNUM=PGNUM
41000	C  SIZE FACTOR FOR PAGE NUMBER FINDER (MAYBE).
41050		QLFT=RLFT
41075	C SAVE IN QLFT FOR 1ST BAR OF LINE CHECK.
41100		RLFT=RLFT-3
41200	C TO CATCH 1ST SLURS.
41300		JCUE=0
41400	
41500	C****	IF(LK.EQ.1)GO TO 2112
41600		IF(LK.EQ.1)GO TO 2113
41700	CX	DO 3112 K=1,LK    
41800	CX3112	Q(K)=SAVES(K)
41900		CALL RLOOP(Q,SAVES,LK)
42000	C PUTS SAVED THINGS INTO Q ARRAY AND POINTER ARRAY (KPN)
42100	CX	DO 4112 K=2,LLL
42200	CX4112	KPN(K)=KSAVE(K)
42300		CALL RLOOP(KPN,KSAVE,LLL)
42400		KPN(1)=1
42500	2113	IF(IPG.EQ.0)GO TO 2112
42600		IF(IFOUND.EQ.0)GO TO 2112
42700		IFOUND=0
42800		DO 183 K=1,JTEM
42900	183	KWDS(K)=JWDS(K)
43000		DO 283 K=1,KWDS(JTEM)
43100	283	RN(K)=RRN(K)
43200		ITEM=JTEM-1
43300	C NOW GOT BACK DATA FOR SINGLE INST.
43400	
43500	C THIS SECTION COLLECTS ALL ITEMS TO USED LATER(NOT EVERYTHING IF 'PARTS')
43600	2112	DO 6 K=1,ITEM
43700		R5=-1
43800		R=CODEN(KWDS,K,RN,J)
43900		IF(R.EQ.0)GO TO 6
44000	C  DUPLICATE BARS WERE CHANGED TO CODE 0
44100		RWD=RN(J)
44200	C RWD IS WDCNT OF EACH ITEM
44300	800	IF(R.NE.4)GO TO 80
44400		IF(RN(J+4).GE.1000)GO TO 801
44500	C FINDS DBL BARS OF ALL SORTS
44600		IF(RWD.GT.2)GO TO 182
44700	C  FOUND A BAR LINE
44800	CC801	IF(RN(J+3).LT.ZLFT)GO TO 6
44900	801	IF(RN(J+3).LT.QLFT)GO TO 6
44920	CC801	IF(RN(J+3).LT.RLFT)GO TO 6
45000	C DROPS BAR LINE TO LEFT OF FIRST NOTE OR REST.
45100		IF(IPG.EQ.0)GO TO 382 
45200		IF(RWD.LT.2)GO TO 382
45300		LL=RN(J+4)/100.
45400		RR=100*LL+1.0
45500		RN(J+4)=RR
45600	C THIS PRESERVES DOUBLE BARS OF ALL SORTS.
45700	CCC	IF(RN(J+2).NE.0)GO TO 182
45800	C  KEEP BAR LINES ON STAVES >0 BUT DON'T COUNT THEM.
45900	382	CALL DBAR(K,ITEM,J)
46000		IF(YN.EQ.0)GO TO 810
46100		CALL ADRST(KPN,RR)
46200		GO TO 6
46300	182	RN(J+1)=44
46400	C  CHANGES CODE NUM 
46500		IF(IPG.EQ.0)GO TO 482
46600		IF(RN(J+5).EQ.150)RN(J+2)=SN
46700	C P5=150=PUT CRESC-DECRESC. IN ALL PARTS (WHEN IN PARTS MODE [IPG=-1])
46800	482	IF(RWD.LT.5)GO TO 80
46900		IF(RN(J+7).GE.3)GO TO 6
47000	C  SKIP HEAVY BRACKETS.
47100		IF(RWD.LT.4)GO TO 80
47200		A=RN(J+6)
47300		IF(A.EQ.0)GO TO 80
47400		IF(A.GE.199)RN(J+6)=200
47500	
47600	80	IF(R.NE.16)GO TO 180
47700		IF(RWD.LT.8)GO TO 280
47800		IF(RN(J+10).EQ.1)RN(J+3)=RN(KWDS(K-1)+3)
47900	C PUT CONTINUATION OF TEXT IN SAME POS. AS 1ST UNIT OF TEXT.
48000	280	IF(IPG.EQ.0)GO TO 180
48100		IF(RN(J+5).GE.100)RN(J+2)=SN
48200	C CATCHES WANTED TEXT ON OTHER LINES.  (P5>100)
48300	CXXX 	IF(RN(J+5).GT.RLTRSZ)RN(J+5)=RLTRSZ
48400	C  LIMITS SIZE OF LETTERS.  ADJUST RLTRSZ TO SUIT. (SET AT 1.0 NOW)
48500	
48600	180	RSN=RN(J+2)
48700		IF(IPG.LT.0)GO TO 2011
48800		ISN=RSN
48900		RSN=SN
49000	C  THE STAFF NUM.
49100	
49200	2011	IF(R.NE.3)GO TO 3801
49300		IF(IPG.LT.0)GO TO 2111
49400		CLEF=RCL(ISN)
49500		GO TO 4801
49600	2111	IF(RN(J+6).LT.100)GO TO 4804
49700		RN(J+2)=SN
49800	C SIZE +100 (R6) IS PUT IN ALL PARTS (FOR P,PP,PPP,MF, ETC.)
49900		GO TO 4803
50000	4804	IF(YCLEF)GO TO 4801
50100		IF(RSN.NE.SN)GO TO 6
50200	4801	RR=CLEFN(RN,J)
50300	C  GET CLEF NUMBER.
50400		IF(RR.EQ.CLEF)GO TO 6
50500	C SKIP DUPLICATE CLEFS.
50600		IF(RR.GT.4)GO TO 4800
50700	C 0=TREB 1=BASS 2=ALTO 3=TENOR 4=PERCUSSION CLEF.
50800		IF(IPG.LT.0)GO TO 17
50900		RCL(ISN)=RR
51000		IF(RCLEF(ISN).EQ.99)RCLEF(ISN)=RR
51100	C  SAVE FIRST CLEF ON EACH STAFF
51200		GO TO 1800
51300	CP16	FORMAT(' CLEF=',F2.0,' --CHANGE TO--',$)
51400	CP	TYPE 16,RR
51500	CP	ACCEPT 5,RR
51600	17 	R5=RR
51700		CLEF=RR
51800		YCLEF=0
51900		GO TO 1800
52000	4800	IF(RSN.NE.SN)GO TO 6
52100	4803	RN(J+1)=33
52200		GO TO 1800
52300	4802	YCLEF=0
52400	C  CATCHES CLEF AFTER FIRST RESTS.
52500		GO TO 6
52600	
52700	3801	IF(R.NE.17)GO TO 3800
52800		RR=RN(J+5)
52900		IF(IPG.GE.0)GO TO 3803
53000		IF(RSN.NE.SN)GO TO 6
53100	C FOR PARTS:  SKIP IF NOT ON RIGHT STAFF.
53200		IF(QSIG.EQ.RR)GO TO 6
53300	C FOR PARTS:  IF SAME KEY SIG. THEN OMIT IT.
53400		QSIG=RR
53500		GO TO 3804
53600	3803	IF(RR.EQ.RSIG(ISN))GO TO 6
53700	C SKIPS DUPL. KEY SIGS. 
53800	C***** WHAT ABOUT CHANGING KEY SIGS?????
53900	CC	YSIG=0
54000	3804	IF(RSIG(ISN).EQ.99)RSIG(ISN)=RR
54100	C SETS UP KSIG ONCE ONLY.
54200		GO TO 1800
54300	
54400	3800	IF(R.EQ.8)GO TO 6
54500	C  OMIT ALL STAVES FOR NOW
54600		IF(R.NE.18.)GO TO 81
54700	CP	IF(IPG)GO TO 2311
54800		XMTR=RMETER(ISN)
54900		GO TO 1801
55000	2311	IF(YMTR)GO TO 1801
55100		IF(SNMTR.EQ.200.)SNMTR=RSN
55200	C  SO IT WON'T REPEAT METERS.
55300	C  CHECK ALL METERS IF LINE HAS NOT THIS INST.
55400		IF(RSN.NE.SNMTR)GO TO 6
55500	1801	RA=TSIG(RN,J)
55600	C  THE TIME SIG.
55700		IF(XMTR.EQ.RA)GO TO 6
55800		XSIG=RA
55900		XMTR=RA
56000		YMTR=0
56100		IF(IPG.LT.0)GO TO 181
56200		RMETER(ISN)=RA
56300		GO TO 1800
56400	181	RR=RN(J+3)
56500		DO 281 LS=1,LLL-1
56600		IF(CODEN(KPN,LS,Q,KW).NE.R)GO TO 281
56700	C LOOK FOR SAME  METER CLOSE TO  SAME POS. (DIF. METER WILL OVERPRINT)
56800		IF(XSIG.NE.TSIG(Q,KW))GO TO 281
56900		IF(ABS(Q(KW+3)-RR).LT.0.5)GO TO 6
57000	281	CONTINUE
57100		GO TO 1800
57200	
57300	81	IF(RSN.NE.SN)GO TO 6
57400	1800	IF(IPG.EQ.0)GO TO 5800
57500		IF(RN(J+3).LT.XLFT)GO TO 6
57600	C OMIT SOME THINGS TO LEFT OF STAFF BEGINNING.
57700		GO TO 6800
57800	5800	IF(R.NE.7)GO TO 282
57900	6800	IF(R.LT.4)GO TO 810
58000		IF(R.EQ.44)GO TO 6801
58100		IF(R.GT.7)GO TO 810
58200	C  NEXT FOR ITEMS WHERE P6 MAY GO PAST 200.
58300		IF(RWD.LT.5)GO TO 810
58400	6801	A=ABS(RN(J+7))
58500		IF(A.LT.2.OR.A.GT.7)GO TO 82
58600	C  CATCHES TRILL WIGGLE OVER END OF LINE.
58700	282	IF(R.NE.5)GO TO 810
58800		IF(RN(J+3).LT.RLFT)GO TO 6
58900	C OMIT ENTERING SLURS.   NEXT CHECKS FOR SLUR OVER END OF LINE
59000	82	IF(RN(J+6).GE.199.)RN(J+6)=200.
59100	C  ****** 200.0 ABOVE IS SUBJECT TO CHANGE!
59200	810	KL=0
59300	CC	IF(R.GT.2)GO TO 1810
59400		IF(R.EQ.1)GO TO 2810
59500		IF(R.NE.2)GO TO 1810
59600		IF(IPG.GE.0)GO TO 2810
59700		IF(RWD.LT.8)GO TO 2810
59800	C NEXT FOR FINDING CUES WHEN IN PARTS MODE.  FINALLY GETS LAST NEEDED POINTER.
59900		IF(RN(J+10).GE.0)JCUE=K
60000	C NEXTS FINDS NOTES AND RESTS WITHOUT RHYTHM (P7 OR P9)
60100	2810	IF(RN(J+3)-PQ.GT.SPCPG)GO TO 1810
60200	C  JUMP IF NOT IN SAME VERT. POS.
60300		IF(RT.NE.R)GO TO 1810
60400	C JUMP IF PREVIOUS ITEM WASN'T THE SAME
60500	CC	IF(RN(J+9).NE.4.0/88.0)GO TO 3810
60600	C JUMP IF NOT A GRACE NOTE
60700	CC	R=0
60800	C R=0 SO THAT GRACE NOTE WILL NEVER BE TOO CLOSE TO REG. NOTE.
60900	CC	GO TO 1810
61000	3810	RS=9-R*2
61100		IF(RWD.GE.RS)GO TO 1810
61200	C JUMP IF WDCNT IS BIG ENOUGH
61300		KL=RS-RWD
61400	C  SEND THE DIFFERENCE TO THE SUBROUTINE AND ADD A RHYTHM (1.0)
61500	1810	IF(IPG.LT.0)RN(J+2)=0
61600	C  ALWAYS SET STAFF NUM TO 0 FOR PARTS.
61700		CALL QRN(J,KPN,K)
61800	C  PUTS NEEDED THINGS INTO Q ARRAY
61900		RT=R
62000		PQ=RN(J+3)
62100	C SAVE THINGS FOR NEXT TIME AROUND LOOP.
62200	6	CONTINUE
62300	
62400		IF(JCUE.NE.0)CALL CUES
62500	
62600	C******↓↓↓↓↓↓ RHYTH RESET ↓↓↓↓↓↓↓↓
62700		CALL SORT(KPN)
62800	C   SORTS Q ARRAY, PUTS IT BACK INTO RN
62900	23	LL=0
63000	C  TO 'MOVE' INSTEAD OF 'JUSTIFY'
63100	CC	J=1
63200	CC223	R=CODEN(KWDS,J,RN,K)
63300	CC	IF(R.LE.3.OR.R.EQ.17.OR.R.EQ.18)GO TO 123
63400	CC	J=J+1
63500	CC	GO TO 223
63600	CC123	R8=ENDLN-RN(K+3)+2
63700	CC	R4=0
63800	CC	R7=0
63900	CC	RS=0
64000	CC	R9=0
64100	CC	R5=10000
64200	C  INSERT??  →→ IF(R8.GT.0)R9=200.
64300	CC33	CALL PTMOVE(RN,KWDS)
64400	C******* IS KQ SUPPOSED TO BE 0!!!!!!!!?????
64500		CALL SHFT0(KQ)
64600	20	CALL RESPC
64700		KNM(JNM)=KNM(JNM)+2
64800	C UPDATE THE FILE NAME
64900		GO TO 1344
65000		END
65100	
65200		SUBROUTINE READX(IDEV,NAME,IEXT,KEND,NUMS)
65300		COMMON /PTR/INP(72)
65400		DIMENSION FORM2(5),FORMT(5),NUMS(30)
65500		DATA FORMT(1)/'('/,FORM2/'A1,','A2,','A3,','A4,','A5,'/
65600		1, FORM3/'30I)'/
65700	1	FORMAT(72A1)
65800	CC	IEXT='MS'
65900	CC	ACCEPT 1,INP
66000		KEND=0
66100	C IDEV=DEVICE NUMBER (1=DSK, 5=TTY)
66200		READ(IDEV,1,END=12)INP
66300		DO 2 K=2,72
66400		IF(INP(K).EQ.' ')GO TO 3
66500	2	IF(INP(K).EQ.'.')GO TO 4
66600	3	FORMT(3)=FORM3
66700		FORMT(4)=' '
66800		FORMT(5)=' '
66900	5	FORMT(2)=FORM2(K-1)
67000		REREAD FORMT,NAME,NUMS
67100		GO TO 10
67200	4	FORMT(3)=FORM2(1)
67300	C  CATCHES DOT
67400		DO 7 N=K+1,72
67500	7	IF(INP(N).EQ.' ')GO TO 8
67600	8	FORMT(4)=FORM2(N-K-1)
67700		FORMT(5)=FORM3
67800		FORMT(2)=FORM2(K-1)
67900		REREAD FORMT,NAME,K,IEXT,NUMS
68000		CALL LO2UP(IEXT)
68100	10	CALL LO2UP(NAME)
68200		RETURN
68300	12	KEND=-1
68400		END
68500	
68600		SUBROUTINE LO2UP(J)
68700	C CONVERTS ALL LOWER CASE TO UPPER CASE.
68800		J=J.AND..NOT.((J/2).AND."201004020100)
68900		END
69000	
69100		FUNCTION TSIG(Q,J)
69200		DIMENSION Q(1)
69300		TSIG=IFIX(Q(J+5)*100.0+Q(J+6)+.5)
69400	C COMBINES METER NUMS.  (2/4 = 204. ETC.)
69500		END